﻿//Install Visual T4 for syntax highlighting!
//http://visualstudiogallery.msdn.microsoft.com/40a887aa-f3be-40ec-a85d-37044b239591



using System;

namespace Sponsorship.Domain.Presents
{
		
    public sealed class EnterPresent : ICommand
    {
        public Guid PresentId { get; private set; }
        public Guid PresentTemplateId { get; private set; }
        public Guid PersonId { get; private set; }
        public Guid SponsorId { get; private set; }
        public PresentData PresentData { get; private set; }
        public string Comment { get; private set; }
        
        public EnterPresent () {}
        public EnterPresent (Guid presentId, Guid presentTemplateId, Guid personId, Guid sponsorId, PresentData presentData, string comment)
        {
            PresentId = presentId;
            PresentTemplateId = presentTemplateId;
            PersonId = personId;
            SponsorId = sponsorId;
            PresentData = presentData;
            Comment = comment;
        }
    }
    
    public sealed class PresentEntered : Event
    {
        public Guid PresentId { get; private set; }
        public Guid PresentTemplateId { get; private set; }
        public Guid PersonId { get; private set; }
        public Guid SponsorId { get; private set; }
        public PresentData PresentData { get; private set; }
        public string Comment { get; private set; }
        
        public PresentEntered () {}
        public PresentEntered (Guid presentId, Guid presentTemplateId, Guid personId, Guid sponsorId, PresentData presentData, string comment)
        {
            PresentId = presentId;
            PresentTemplateId = presentTemplateId;
            PersonId = personId;
            SponsorId = sponsorId;
            PresentData = presentData;
            Comment = comment;
        }
    }
    
    public sealed class ChangePresent : ICommand
    {
        public Guid PresentId { get; private set; }
        public int Version { get; private set; }
        public Guid PresentTemplateId { get; private set; }
        public Guid PersonId { get; private set; }
        public Guid SponsorId { get; private set; }
        public PresentData PresentData { get; private set; }
        public string Comment { get; private set; }
        
        public ChangePresent () {}
        public ChangePresent (Guid presentId, int version, Guid presentTemplateId, Guid personId, Guid sponsorId, PresentData presentData, string comment)
        {
            PresentId = presentId;
            Version = version;
            PresentTemplateId = presentTemplateId;
            PersonId = personId;
            SponsorId = sponsorId;
            PresentData = presentData;
            Comment = comment;
        }
    }
    
    public sealed class PresentChanged : Event
    {
        public Guid PresentId { get; private set; }
        public Guid PresentTemplateId { get; private set; }
        public Guid PersonId { get; private set; }
        public Guid SponsorId { get; private set; }
        public PresentData PresentData { get; private set; }
        public string Comment { get; private set; }
        
        public PresentChanged () {}
        public PresentChanged (Guid presentId, Guid presentTemplateId, Guid personId, Guid sponsorId, PresentData presentData, string comment)
        {
            PresentId = presentId;
            PresentTemplateId = presentTemplateId;
            PersonId = personId;
            SponsorId = sponsorId;
            PresentData = presentData;
            Comment = comment;
        }
    }
    
    public sealed class DeletePresent : ICommand
    {
        public Guid PresentId { get; private set; }
        public int Version { get; private set; }
        
        public DeletePresent () {}
        public DeletePresent (Guid presentId, int version)
        {
            PresentId = presentId;
            Version = version;
        }
    }
    
    public sealed class PresentDeleted : Event
    {
        public Guid PresentId { get; private set; }
        
        public PresentDeleted () {}
        public PresentDeleted (Guid presentId)
        {
            PresentId = presentId;
        }
    }

}